package structs

import "fmt"

type Person struct {
	name string
	city string
	age  int
}

func NewStruct() {
	var p Person
	p.name = "zhangsan"
	p.city = "beijing"
	p.age = 23
	fmt.Printf("p = %v\n", p)
}

// 匿名结构体
func AnonyStruct() {
	var user struct {
		name string
		age  int
	}
	user.name = "zhangsan"
	user.age = 23
}

/*
结构体指针
*/
func StructPointer() {
	// 初始化一个结构体指针
	var ps = new(Person)
	ps.name = "lisi"
	ps.age = 24
	fmt.Printf("%v\n", ps) // &{lisi  24}
}

/*
使用结构体指针地址实例化
*/
func StructPointerAddr() {
	// 通过取结构体地址实例化
	var p = &Person{}
	fmt.Println(p)    // &{  0} 零值
	p.name = "wangwu" // 同 (*p).name = "wangwu"，go语言底层实现了语法糖
	p.age = 25
	// 指针实例
	fmt.Println(p) // &{wangwu  25}
	// 取地址实例值
	fmt.Println(*p) // {wangwu  25}
}
